//
//  WBStatusListViewModel.swift
//  Weibo
//
//  Created by FF on 16/12/21.
//  Copyright © 2016年 Cold Wind. All rights reserved.
//



import Foundation

/// 微博数据列表视图

/*
 父类的选择
 
 - 如果类需要 kvc 或者字典转模型框架来设置对象值，类就需要继承 NSOject
 - 如果类知识封装了一些代码逻辑（写了一些函数），可以不用任何父类，好处：更加轻量级
 - 提示： 如果用 OC 写，一律继承自 NSObject
 
 使命： 负责微博的数据处理
 1. 字典转模型
 2. 下拉 / 上拉 刷新数据处理
 
 */


private let pullUpTryTimes = 3

class WBStatusListViewModel {
    /// 微博模型数据懒加载
    lazy var statusList = [WBStatus]()

    /// 上拉刷新错误次数
    private var pullUpErrorTimes = 0
    
    /// 加载微博列表
    ///
    
    ///
    ///
    /// - Parameters:
    ///   - shouldRefresh: 是否刷新表格
    ///   - isPull: 是否是上拉刷新
    ///   - completion: 完成回调
    func loadStatus(isPull: Bool, completion: @escaping (_ isSuccess: Bool, _ shouldRefresh: Bool)->()) {
        
        // 判断是否上拉刷新，同时检查刷新错误
        if pullUpErrorTimes > pullUpTryTimes {
            completion(true, false)
            return
        }
        
        let since_id = isPull ? 0 : (statusList.first?.id ?? 0)
        let max_id = isPull ? (statusList.last?.id ?? 0) : 0
        
        WBNetworkManager.shared.statusList(since_id: since_id, max_id: max_id) { (list, isSuccess) in
            // 1. 字典转模型
            guard let array = NSArray.yy_modelArray(with: WBStatus.self, json: list ?? []) as? [WBStatus] else {
                completion(isSuccess, false)
                return
            }
            
           print("微博刷新了\(array.count)条数据")
            // 2. 拼接数组
            
            !isPull ? (self.statusList = array + self.statusList) : (self.statusList += array)
            
            
            // 判断上拉刷新数据量
            if isPull && array.count == 0 {
                self.pullUpErrorTimes += 1
                completion(isSuccess, false)
            }else {
                // 3. 完成回调
                completion(isSuccess, true)
            }
            
        }
    }
}
